package com.ple.app.login;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.ple.app.jzsf.R;

import java.sql.Time;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;

/**
 * Created by twenj on 2016/11/14.
 * 采用第三方短信验证API Mob sdk
 * 找回密码，重设密码
 */

public class ForgetPsdActivity extends Activity {

    private EditText editTextPhoneNum;
    private EditText editTextCode;
    private Button btnGetVerifyCode;
    private Button btnNext;
    private boolean mobileNum;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_forget_psd);

        //初始化MobSDK
        initMobSDK();

        //初始化试图
        initView();
        //初始化事件
        initEvents();
    }

    private void initMobSDK() {
        SMSSDK.initSDK(this, "1a96cac7f2099", "b6cf060c57ca33cb2b704c4c0b78d948");

        EventHandler eh = new EventHandler() {
            @Override
            public void beforeEvent(int i, Object o) {
                super.beforeEvent(i, o);
            }

            @Override
            protected void finalize() throws Throwable {
                super.finalize();
            }

            @Override
            public void afterEvent(int event, int result, Object data) {
                if (result == SMSSDK.RESULT_COMPLETE) {
                    //回调完成
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                        //提交验证码成功
                        System.out.println("验证码验证通过");
                        Intent intent = new Intent(ForgetPsdActivity.this, ModifyPsdActivity.class);
                        startActivity(intent);
                    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        //获取验证码成功
                        System.out.println("验证码获取成功");

                    } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
                        //返回支持发送验证码的国家列表
                    }
                } else {
                    ((Throwable) data).printStackTrace();
                };
            }
        };

        SMSSDK.registerEventHandler(eh);
    }


    /**
     * 初始化试图
     */
    private void initView() {
        editTextPhoneNum = (EditText) findViewById(R.id.getPsd_phoneNum);
        editTextCode = (EditText) findViewById(R.id.getPsd_inputCode);
        btnGetVerifyCode = (Button) findViewById(R.id.getPsd_verifyCode);
        btnNext = (Button) findViewById(R.id.getpsd_next);
    }

    /**
     * 初始化按钮监听事件
     */
    private void initEvents() {
        /**
         * 先获取输入的密码，并且做简单的一些验证
         * 获取验证码，用于密码更正
         */
        btnGetVerifyCode.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isMobileNum()) {
                    String strPhoneNum = editTextPhoneNum.getText().toString();//获取输入的手机号码

                    SMSSDK.getVerificationCode("86", strPhoneNum);

                    setVerifyCodeBtnStyle();

                } else {
                    Toast.makeText(ForgetPsdActivity.this, "手机号码不正确，请重新输入！", Toast.LENGTH_LONG).show();
                    editTextPhoneNum.setText("");
                }
            }
        });

        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String strVerifyCode = editTextCode.getText().toString();//获取拿到的短信验证码
                String strPhoneNum = editTextPhoneNum.getText().toString();//获取输入的手机号码

                SMSSDK.submitVerificationCode("86", strPhoneNum, strVerifyCode);
            }
        });

    }

    /**
     * 判断手机格式是否正确
     * 移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
     * 联通：130、131、132、152、155、156、185、186
     * 电信：133、153、180、189、（1349卫通）
     * 总结起来就是第一位必定为1，第二位必定为3或5或8，其他位置的可以为0-9
     * 使用 正则表达式
     */
    public boolean isMobileNum() {
        String strPhoneNum = editTextPhoneNum.getText().toString();//获取输入的手机号码

        String regPhone = "(1[3,5,8]\\d{9})";//电话匹配表达式
        Pattern pattern = Pattern.compile(regPhone);//生成匹配模式
        Matcher matcher = pattern.matcher(strPhoneNum);//进行匹配拿到匹配结果

        if (matcher.matches()) {//如果有匹配结果
            //System.out.println(matcher);
            mobileNum = true;
        } else {
            mobileNum = false;
        }
        return mobileNum;
    }

    /**
     * 禁用按钮
     * 设定按钮的背景色为灰色
     * 60s倒计时
     */
    private void setVerifyCodeBtnStyle() {
        btnGetVerifyCode.setEnabled(false);
        btnGetVerifyCode.setBackground(getResources().getDrawable(R.drawable.rounded_btn_gray));
        //设定60s
        TimeCount timeCount = new TimeCount(60000, 1000);
        timeCount.start();
    }

    /**
     * 倒计时辅助类
     */
    class TimeCount extends CountDownTimer {

        public TimeCount(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onTick(long millisUntilFinished) {
            btnGetVerifyCode.setText("(" + millisUntilFinished / 1000 + "S)");
        }

        @Override
        public void onFinish() {
            btnGetVerifyCode.setText("重新发送");
            btnGetVerifyCode.setEnabled(true);
            btnGetVerifyCode.setBackground(getResources().getDrawable(R.drawable.rounded_btn_ok));
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        SMSSDK.unregisterAllEventHandler();
    }
}

